package nio.bytebuffer;


import nio.NioUtils;

import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * ReadDemo
 *
 * @author chenxin
 * @date 2022/05/24 15:12
 **/
public class ReadDemo {

    public static void main(String[] args) {
        String str = "put test data";
        ByteBuffer buffer = ByteBuffer.allocate(16);

        // 第一种初始化 默认写模式
        buffer.put(str.getBytes(StandardCharsets.UTF_8));

        // 第二种初始化
        buffer = ByteBuffer.wrap(str.getBytes(StandardCharsets.UTF_8));

        // 第三种初始化
        buffer = Charset.defaultCharset().encode(str);

        // 第四种初始化 默认为读模式
        buffer = StandardCharsets.UTF_8.encode(str);

        // 切换到读模式
        buffer.flip();

        System.out.println(NioUtils.getString(buffer, 4));
        // 从头开始读
        buffer.rewind();
        System.out.println(NioUtils.getString(buffer, 4));
        buffer.rewind();

        // mark 标记 & reset 重置到mark
        System.out.println(NioUtils.getString(buffer, 2));
        buffer.mark();
        System.out.println(NioUtils.getString(buffer, 4));
        buffer.reset();
        System.out.println(NioUtils.getString(buffer, 4));

        // 总空间大小
        int capacity = buffer.capacity();
        // 当前读取位置
        int position = buffer.position();
        // 实际数据长度
        int limit = buffer.limit();
        System.out.println("capacity:"+capacity);
        System.out.println("position:"+position);
        System.out.println("limit:"+limit);

        // get(i) 不改变读索引的位置
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < limit; i++) {
            result.append((char) buffer.get(i));
        }
        System.out.println(result);

        System.out.println(buffer.position());
    }

}